package com.xuxu.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuxu.util.RabbitConnectionUtil;

/**
 *  队列模式 RabbitMQ 生产者
 *  需求分析:
 * 	   要模拟三十条信息被两个消费者消费的场景
 * 	目的: 为了查看当前模式下，消息是怎样被消费者消费的
 *
 *  步骤:
 *  1.使用工具类获取连接对象
 *  2.获取频道对象
 *  3.声明频道
 *  4.准备发送的信息
 *  5.发送信息
 *  6.关闭资源
 *
 *
 *  结论：两个消费者，消费同一个队列的消息的时候，消费者是争抢式的，他们是竞争关系。
 */
public class Producer {

    //定义队列名称
    static final String QUEUE_NAME = "work_queue";


    public static void main(String[] args) throws Exception {
        //使用RabbitMQ获取连接对象
        Connection connection = RabbitConnectionUtil.getConnection();

        //通过连接获取频道
        Channel channel = connection.createChannel();

        //声明队列
        /*
            参数一：队列名称
            参数二：是否持久化存储
            参数三：是否独占本次连接
            参数四：是否在不用时自动删除
            参数五：其他参数
         */
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);

        //使用循环发送30条信息
        for (int i = 1; i <= 30; i++) {
            String message = "RabbitMQ消息，这是第  "+i +"  条消息";
            //发送信息
            /*
                参数一：交换机名称，如果没有就写空字符串，指定的是 DefaultExchange
                参数二：路由key，在简单模式下（队列模式也属于简答模式）可以写队列的名称
                参数三：消息的其他属性
                参数四：消息内容，需要转化成 byte
             */
            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
            System.out.println("发送的消息是：    "+message);
        }
        //关闭资源
        //关闭频道
        channel.close();
        //关闭连接对象
        connection.close();

    }
}
